package com.wms.service.impl;

import com.wms.entity.BStockOutRecord;
import com.wms.mapper.BStockOutRecordMapper;
import com.wms.service.BStockOutRecordService;
import com.wms.utils.Create;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 出库记录Service实现类
 * 具体业务逻辑实现
 */
@Service // 标记为Spring服务类，用于注入
public class BStockOutRecordServiceImpl implements BStockOutRecordService {

    // 注入DAO层接口（Spring自动装配）
    @Autowired
    private BStockOutRecordMapper stockOutRecordMapper;
    @Autowired
    Create create;

    /**
     * 新增出库记录（带事务管理）
     * @param stockOutRecord 出库记录实体
     * @return 新增记录的ID
     */
    @Override
    @Transactional // 开启事务：若插入失败则回滚，保证数据一致性
    public void addStockOutRecord(BStockOutRecord stockOutRecord) {
        String pcid=create.IDcreate("CK");

        // 2. 计算 3 个月后
        LocalDate now = LocalDate.now();
        LocalDate threeMonthsLater = now.plusMonths(3);
        stockOutRecord.setValidDate(threeMonthsLater);

        stockOutRecord.setBatchNo(pcid);
        // 1. 业务参数校验（避免无效数据插入）
        if (stockOutRecord == null) {
            throw new IllegalArgumentException("出库记录实体不能为空");
        }
        if (stockOutRecord.getNum() == null || stockOutRecord.getNum() <= 0) {
            throw new IllegalArgumentException("出库数量必须大于0");
        }
        if (stockOutRecord.getBatchNo() == null || stockOutRecord.getBatchNo().trim().isEmpty()) {
            throw new IllegalArgumentException("批次号不能为空");
        }


        // 2. 调用DAO层插入数据
        int affectedRows = stockOutRecordMapper.insertStockOutRecord(stockOutRecord);
        if (affectedRows != 1) {
            throw new RuntimeException("新增出库记录失败，影响行数异常");
        }


    }

    /**
     * 根据ID查询出库记录（实现）
     * @param id 主键ID
     * @return 出库记录实体
     */
    @Override
    public BStockOutRecord getStockOutRecordById(Long id) {
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("记录ID必须大于0");
        }
        return stockOutRecordMapper.getStockOutRecordById(id);
    }
}
